DM 常见命令

序言

  在企业信息化系统中,数据库是最核心的基础设施之一,而 DM(达梦数据库) 作为国产数据库代表,已在不少政府、企业及大型项目中被广泛采用。由于其在语法和存储机制上与 Oracle 等数据库存在一定差异,很多开发或运维人员在日常使用中常会遇到表结构调整、索引管理、字段类型修改等操作场景。

  为了便于在工作中快速查找与参考,这里整理并记录了一些达梦数据库(DM)常见 SQL 操作示例,涵盖建表、表结构变更、字段修改、索引管理等典型场景。本文旨在作为一份实用备忘录,帮助开发人员在日常开发、调试或迁移过程中更加高效地完成数据库相关操作。

建表示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE TABLE "CITY_STEWARD_BUS"."bus_contract"
(
"id" INT IDENTITY(1, 1) NOT NULL,
"contract_name" VARCHAR(256),
"contract_code" VARCHAR(50),
"contract_type" INT,
NOT CLUSTER PRIMARY KEY("id")
) STORAGE(ON "MAIN", CLUSTERBTR);
COMMENT ON TABLE "CITY_STEWARD_BUS"."bus_contract" IS '合同信息表';

COMMENT ON COLUMN "CITY_STEWARD_BUS"."bus_contract"."id" is '自增id';
COMMENT ON COLUMN "CITY_STEWARD_BUS"."bus_contract"."contract_name" is '合同名称';
COMMENT ON COLUMN "CITY_STEWARD_BUS"."bus_contract"."contract_code" is '合同编号';
COMMENT ON COLUMN "CITY_STEWARD_BUS"."bus_contract"."contract_type" is '合同类型(收款1、付款2)';
COMMENT ON COLUMN "CITY_STEWARD_BUS"."bus_contract"."contract_subject" is '合同主体';

  STORAGE(ON "MAIN", CLUSTERBTR) 参数说明

  • 含义:指定表的存储参数,包含 存储位置数据组织方式
  • 详细解释
    • ON "MAIN":表示表数据存储在名为 MAIN 的表空间中。表空间是达梦管理物理存储的逻辑单元,可对应磁盘目录或文件。
    • CLUSTERBTR:表明表的 数据存储结构 使用 聚集 B 树(Clustered B-Tree)组织。数据按某索引(通常是聚集索引)的 B 树结构物理排序,但需注意:
      • 若表中存在聚集索引(如未显式声明 NOT CLUSTER 的主键),数据按该索引的 B 树存储
      • 若所有索引均为非聚集(如本例),达梦可能以 堆表(Heap Table) 形式存储数据,即无序堆叠,此时 CLUSTERBTR 可能无效或需进一步验证参数兼容性

表结构调整

添加字段并增加注释

1
2
3
4
# 添加字段
ALTER TABLE "CITY_BUS"."om_contract" ADD "receive_pay_amount" TINYINT;
# 添加注释
COMMENT ON COLUMN "CITY_BUS"."om_contract"."receive_pay_amount" IS '实收/付款金额';

参数说明:

  • BIZ_MISSION_FILL”.“MISSION:模式名+表名(需要增加字段的表)
  • IS_DEPARTMENT_PLAN:增加的字段名称
  • TINYINT:增加的字段类型(后面可以带上精度例:VARCHAR2 )
1
2
ALTER TABLE "CITY_STEWARD_BUS"."om_contract_receive_pay_plan_service_project_detail" ADD "real_receive_pay_amount" DECIMAL(18, 2);
COMMENT ON COLUMN "CITY_STEWARD_BUS"."om_contract_receive_pay_plan_service_project_detail"."receive_pay_amount" IS '实收/付款金额';

修改字段类型或修改字段精度

1
ALTER TABLE "CITY_BUS"."om_contract" MODIFY receive_pay_amount DECIMAL(18, 2)

参数说明:

  • "CITY_BUS"."om_contract":模式加表
  • receive_pay_amount :表里面的字段
  • DECIMAL(18, 2):需要修改字段的字段类型或长度

字段重命名并修改注释

1
2
ALTER TABLE "SZFMIMP"."T_STOCK_OUT_EXAMINE" RENAME COLUMN "spt_status" to "SFHB";
comment on column "SZFMIMP"."T_STOCK_OUT_EXAMINE"."SFHB" IS '字段描述';

说明:

  • SZFMIMP”.“T_STOCK_OUT_EXAMINE:表
  • `spt_status:旧字段
  • "SZFMIMP”.“T_STOCK_OUT_EXAMINE":要修改的字段 (后面可以加上新字段的类型和长度)

大字段类型字段修改为varchar 类型

— 新建一个字段 确定要改的字段类型

1
2
3
4
5
alter table "SZFMIMP"."T_STOCK_OUT_EXAMINE" add SYYY1 VARCHAR; — 把原有的字段值赋值给新字段
bc. update "SZFMIMP"."T_STOCK_OUT_EXAMINE" set SYYY1=trim(SSYY); — 删除掉老字段
alter table "SZFMIMP"."T_STOCK_OUT_EXAMINE" drop column SSYY; — 重新命名新字段为老字段
alter table "SZFMIMP"."T_STOCK_OUT_EXAMINE" rename column SYYY1 to SSYY; — 修改新字段的注释
comment on column "SZFMIMP"."T_STOCK_OUT_EXAMINE".“SSYY” IS ‘申诉原因’;

注:以上例子是要把 ssyy 类型(原类型为clob) 修改为 varchar 类型成功却不用删表

索引

创建

1
2
3
4
5
6
# 唯一索引
CREATE UNIQUE INDEX uk_c_id ON "CITY_STEWARD_BUS"."om_contract"("c_id");
# 普通索引
CREATE INDEX idx_order_id ON "CITY_STEWARD_BUS"."t_base_person"("order_id");
# 复合索引
CREATE INDEX idx_order_id_user_id ON "CITY_STEWARD_BUS"."t_base_person"("order_id", "user_id");

删除索引

1
DROP INDEX SZFMIMP.idx_type;

说明

  • SZFMIMP:模式名
  • idx_type:索引名
0%